import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import cv2
from sklearn.cluster import KMeans
df = pd.read_csv('artwork_img_kmean.csv')
sample_images = df.Artwork_Image_Path.sample(16).tolist(); sample_images
fig,axes=plt.subplots(4,4,figsize=(15,15))
for i,iax in enumerate(axes.flatten()):
iax.imshow(plt.imread(sample_images[i]))
iax.axis("off")
def find_color_palettes(imgpath):
img = cv2.cvtColor(cv2.imread(imgpath), cv2.COLOR_BGR2RGB)
nrows, ncols, nchns = img.shape
X = img.reshape(nrows*ncols, nchns)
km = KMeans(n_clusters=5, random_state=0).fit(X)
assert km.n_iter_ < km.max_iter, "did not converge: iter(n={} max={})".format(km.n_iter_, km.max_iter)
labels, counts = np.unique(km.labels_, return_counts=True)
sorted_by_count = sorted(zip(labels, counts), key=lambda x:x[1], reverse=True)
palettes_by_count = [km.cluster_centers_[label].round(0).astype(int).tolist()
for label, count in sorted_by_count]
plt.subplots(2,1,figsize=(10,10),gridspec_kw={})
axes =(plt.subplot2grid((2, 5), (0, 0), colspan=5),
plt.subplot2grid((2, 5), (1, 0)),
plt.subplot2grid((2, 5), (1, 1)),
plt.subplot2grid((2, 5), (1, 2)),
plt.subplot2grid((2, 5), (1, 3)),
plt.subplot2grid((2, 5), (1, 4)))
map(lambda ax:ax.axis("off"), axes)
axes[0].imshow(img)
for i, p in enumerate(palettes_by_count):
axes[i+1].imshow([[palettes_by_count[i]]*4]*4)
plt.tight_layout()
find_color_palettes(sample_images[0])
find_color_palettes(sample_images[1])
find_color_palettes(sample_images[2])
find_color_palettes(sample_images[3])
find_color_palettes(sample_images[4])
find_color_palettes(sample_images[5])
find_color_palettes(sample_images[6])
find_color_palettes(sample_images[7])
find_color_palettes(sample_images[8])
find_color_palettes(sample_images[9])
find_color_palettes(sample_images[10])
find_color_palettes(sample_images[11])
find_color_palettes(sample_images[12])
find_color_palettes(sample_images[13])
find_color_palettes(sample_images[14])
find_color_palettes(sample_images[15])